package com.richpay.basejava.base15;

/**
 * throw和throws的区别：
 * <p>
 * throw:用于方法中主动抛出一个异常对象。
 * throws:用于方法声明的后面指定一个异常类列表。
 * 告诉调用者如果想调用这个方法必须对其进行异常处理或者继续向外抛出.
 * <p>
 * Exception和RuntimeException的区别:
 * A:RuntimeException的父类是Exception
 * B:RuntimeException是非受检异常(编译器对其不做处理)。
 * C:Exception是受检异常(在编译时编译器会对其进行异常检测，如果对异常既没有就地处理，也没有抛给调用者进行处理，则编译出错)
 * D:RuntimeException及其子类异常对象不需要显示声明为抛出
 */
public class ThrowDemo {
    public static void main(String[] args) {

        b();
    }

    /**
     * 在方法声明的后面通过throws 关键字后面跟异常类列表，多个异常类使用,分割
     *
     * @throws NullPointerException
     */
    static void a() throws NullPointerException {
        throw new NullPointerException("我是主动抛出的异常");
    }

    static void b() {
        a();
    }
}
